﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Utilites;

namespace Interfaces
{
    /// <summary>
    /// Интерфейс репозитория
    /// </summary>
    /// <typeparam name="T">Тип хранимых объектов</typeparam>
    public interface IRepository<T>
    {
        /// <summary>
        /// Предоставляет доступ к коллекции объектов, хранимой в базе данных
        /// </summary>
        /// <returns>Список всех объектов. Ключ - id объекта, значение - сам объект с аналогичным id</returns>
        SmartDictionary GetAllObjects();

        /// <summary>
        /// Добавляет объект в базу данных
        /// </summary>
        /// <param name="obj">Исходный объект</param>
        void InsertObject(T obj);

        /// <summary>
        /// Удаляет объект из базы данных
        /// </summary>
        /// <param name="obj"></param>
        void DeleteObject(T obj);

        /// <summary>
        /// Применяет изменения
        /// </summary>
        void Go();

        /// <summary>
        /// Обработчик событий таймера обновлений
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnTimerUpdateInvoked(object sender, EventArgs e);

        /// <summary>
        /// Метод принудительной перезагрузки данных из базы
        /// </summary>
        void Reload();
    }
}
